#pragma once

#include <string>

#include "base.h"

#include "IDBInstance.h"
#include "ITable.h"
#include "helper/IOpenable.h"

namespace helper {
namespace demo {

class OptionsArgs;
template<typename K = Slice, typename V = Slice>
class IRocksdb : public IDBInstance, public ::helper::Openable, public ITable<K, V>{
public:
  using super_table = ITable<K, V>;
  using key_type  = typename super_table::key_type;
  using value_type = typename super_table::value_type;
  using visitor = typename super_table::visitor;
  using iterator = typename super_table::iterator;

	virtual ~IRocksdb() {}
  virtual const std::string & name() const = 0;

  virtual const OptionsArgs & optionsArgs() const = 0;
  virtual OptionsArgs & optionsArgs()  = 0;

};

using AbstractRocksdb = IRocksdb<Slice, Slice>;

}//namespace demo
}//namespace helper
